<?php
    class Tiri_App{

        private static $_instance;

        private static $_appRoot;

        private static $_appControllerPath;

        private static $_appTempatePath;

        private function __construct(){}

        /** app代表当前请求的Context 故全局单例*/
        static public function getInstance(){
            if(NULL == self::$_instance){
                self::$_instance = new Tiri_App();
            }
            return self::$_instance;
        }

        /** 系统入口函数 ,加载配置，初始化组建*/
        public static function init(){

            //error_reporting(E_ALL ^ E_NOTICE ^ E_STRICT);
            error_reporting(E_ALL ^ E_NOTICE);
            ob_start();

            function __autoload($classname){
                require_once str_replace('_' , '/' ,$classname).'.php';
            }
            register_shutdown_function(array('Tiri_Hook' , 'runShutdownHook'));

        }
        public static function loadConfig(){
            /** 加载默认配置 */
            if(file_exists(__TIRI_ROOT__.'/config.inc.php')){
                require_once __TIRI_ROOT__.'/config.inc.php';
                Tiri_Config::loadConfig($config);
                unset($config);
            }
            /** 加载App配置 */
            if(file_exists(__APP_ROOT__.'/config.inc.php')){
                require_once __APP_ROOT__.'/config.inc.php';
                Tiri_Config::loadConfig($config);
                unset($config);
            }

            if(file_exists(__APP_ROOT__.'/hook.php')){
                require_once __APP_ROOT__.'/hook.php';
            }

            Tiri_Hook::getInstance()->runHook('afterLoadConfig');


            date_default_timezone_set(Tiri_Config::get('timezone'));

            /** 设置App个性相关的全局变量*/
            self::$_appRoot = __APP_ROOT__;
            self::$_appControllerPath = __APP_ROOT__.Tiri_Config::get('controller_path');
            self::$_appTempatePath = __APP_ROOT__.Tiri_Config::get('template_path');

            /** 初始化User 类 : 给指定一个数据Model*/
            /** User 加载cookie 必须在使用前init */
            $widgetUserConf = Tiri_Config::get('Widget_User');
            if( $widgetUserConf['model'] != ''){
                Widget_User::getInstance() -> init($widgetUserConf['model']);
            }
            /** 加载工具函数 */
            Func_Core::init();
            /** app资源管理类初始化 */
            Widget_Resource::init();
            /**   Geo 类要截取部分ajax请求，要修改系统路由表 ，必须在使用前初始化添加路由规则 */
            Func_Geo::init();
            ob_clean();
        }

        public static function cliInit(){

            //error_reporting(E_ALL ^ E_NOTICE ^ E_STRICT);
            error_reporting(E_ALL ^ E_NOTICE);
            ob_start();

            function __autoload($classname){
                require_once str_replace('_' , '/' ,$classname).'.php';
            }

            if(file_exists(__TIRI_ROOT__.'/config.inc.php')){
                require_once __TIRI_ROOT__.'/config.inc.php';
                Tiri_Config::loadConfig($config);
                unset($config);
            }
            /** 加载App配置 */
            if(file_exists(__APP_ROOT__.'/config.inc.php')){
                require_once __APP_ROOT__.'/config.inc.php';
                Tiri_Config::loadConfig($config);
                unset($config);
            }

            date_default_timezone_set(Tiri_Config::get('timezone'));

            /** 加载工具函数 */
            Func_Core::init();

        }
        public static function getAppControllerPath(){
            return self::$_appControllerPath;
        }

        public static function getAppTemplatePath(){
            return self::$_appTempatePath;
        }

        public static function getAppRootPath(){
            return self::$_appRoot;
        }
    }
?>
